package main

import "fmt"

// 定义一个二叉树结构体
type TreeNode struct {
	Val   int
	Left  *TreeNode   // 左子节点
	Right *TreeNode   // 右子节点
}

// 前序遍历
func preorderTraversal(root *TreeNode) []int {
	if root == nil {
		return []int{}
	}
	// 定义一个数组用于存储遍历结果
	var vals []int
	vals = append(vals, root.Val) // 遍历当前节点，将其值添加到数组中
	vals = append(vals, preorderTraversal(root.Left)...)	// 遍历左子树并将其遍历结果添加到数组中
	vals = append(vals, preorderTraversal(root.Right)...)	// 遍历右子树并将其遍历结果添加到数组中
	return vals
}

func main() {
	// 创建一个二叉树
	root := &TreeNode{Val: 1}
	root.Left = &TreeNode{Val: 2}
	root.Right = &TreeNode{Val: 3}
	root.Left.Left = &TreeNode{Val: 4}
	root.Left.Right = &TreeNode{Val: 5}

	fmt.Println(preorderTraversal(root)) // [1 2 4 5 3]
}
//中序遍历和后序遍历略